<?php
/**
 * 生产者 php client.php
 * 消费者  php worker.php
 *
 * Worker 注册了一个 reverse_string 函数,用于反转接收到的字符串
 * Client 异步发送任务到队列
 * Worker 会一直运行并等待处理任务
 * 使用 doBackground() 实现异步任务处理
 * 你还可以根据需要修改:
 * 添加更多的 worker 函数处理不同类型的任务
 */
// 创建 worker 对象
$worker = new GearmanWorker();

// 添加默认服务器 (localhost:4730)
$worker->addServer();

// 注册一个处理函数
$worker->addFunction("reverse_string", function ($job) {
    echo "开始处理任务...\n";

    // 获取任务数据
    $workload = $job->workload();
    echo "收到数据: " . $workload . "\n";

    // 处理任务 - 这里简单地反转字符串
    $result = strrev($workload);

    // 模拟耗时操作
    sleep(2);

    echo "处理完成: " . $result . "\n";
    return $result;
});

echo "Worker 已启动,等待任务...\n";

// 开始工作循环
while ($worker->work()) {
    if ($worker->returnCode() != GEARMAN_SUCCESS) {
        echo "发生错误: " . $worker->error() . "\n";
        exit;
    }
}